﻿

using F29ServerProcess.Interfaces;
using F29ServerProcess.Models;
using IotContract.Dtos.Servers.Process.F29;
using IotContract.Dtos.Servers.Pushs;
using IotContract.Enums;
using IotContract.Interfaces;
using IotContract.Interfaces.Process;
using IotContract.Models.Jobs.F29;
using IotContract.Models.Process.F29;
using Mapster;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using XT.Common.Extensions;
using XT.Common.Services;

namespace _29ServerProcess.DataProcess;

//public class FmtDataProcess : IServerProcessHandle
//{
//    public string ProcessName { get; set; } = F29ServerConst.ProcessName;
//    public IotEquipType ProcessType { get; set; } = IotEquipType.FMT;

//    private readonly IServerMainManager _mainProcess;
//    private readonly IProcessDataService _processDataService;
//    private readonly IProcessJobService _processJobService;
//    private readonly IEquipValidateService _equipValidateService;
//    private readonly ILogService _logService;

//    public FmtDataProcess(IServerMainManager serverMainManager, IEquipValidateService equipValidateService, IProcessDataService processDataService, IProcessJobService processJobService, ILogService logService)
//    {
//        _mainProcess = serverMainManager;
//        _processDataService = processDataService;
//        _processJobService = processJobService;
//        _equipValidateService = equipValidateService;
//        _logService = logService;
//    }

//    public async Task<bool> ParsingData()
//    {
//        try
//        {
//            // 获取数据
//            var equips = await _mainProcess.GetEquips<LgPushHkDto>(new IotContract.Models.Clients.ClientRequestCommand
//            {
//                RequestType = IotEquipType.FMT.ToString(),
//                ProtobufType = IotProtobufType.LG_HK.ToString()
//            });


//            var fmtUnitDic = _processDataService.Fmts;
            
//            Parallel.ForEach(equips, equip =>
//            {
                
//                F29ProcessFmtData fmtUnit = null;
//                if (fmtUnitDic.ContainsKey(equip.Num))
//                {
//                    fmtUnit = fmtUnitDic[equip.Num];
//                }
//                else
//                {
//                    fmtUnit = new F29ProcessFmtData();
//                    fmtUnit.EquipNum = equip.Num;
                    
//                    fmtUnit.EquipId = equip.Id;
//                    fmtUnit.Connection = equip.Connection;
//                    fmtUnitDic.TryAdd(equip.Num, fmtUnit);
//                }
//                fmtUnit.Action = equip.Action;
//                fmtUnit.Value = equip.Value;
//                fmtUnit.ExplainData = equip.ExplainData;
//                fmtUnit.EquipStatus = equip.EquipStatus;
//                fmtUnit.ReadTime = equip.ReadTime;
                
//            });
//        }
//        catch (Exception ex)
//        {
//            Console.WriteLine(ex.ToString());
//        }

//        return true;
//    }

//    public async Task<bool> ProcessData()
//    {
//        return true;
//    }

//    public async Task<bool> ProcessOrder()
//    {
//        await OrderAppoint();

//        await OrderStacker();

//        return true;
//    }
//    /// <summary>
//    /// 库位预约
//    /// </summary>
//    /// <returns></returns>
//    private async Task OrderAppoint()
//    {
//        var orders = _processJobService.FmtJobs.Values;

//        var equips = _processDataService.Fmts;

//        var equip2 = new F29ProcessFmtData();

//        // 验证库位状态
//        foreach (var order in orders)
//        {
//           var equip= equips.GetValueOrDefault(order.EquipNum);

//           if (equip == null) continue;

           
//            if (order.EquipNum2.IsNotNullOrEmpty())
//            {
//                equip2 = equips.GetValueOrDefault(order.EquipNum2);
//                if (equip2 == null) continue;
//            }

//            if (equip.ExplainData == "R")
//            {
//                // 判断右叉状态
//                if (order.EquipNum2.IsNotNullOrEmpty())
//                {

//                    if (equip2.ExplainData != "R") continue;
                    
//                }
//                // 给定预约状态
//                order.Status = 1;
//                order.OrderTime = DateTime.Now;
//            }
//            else if (equip.ExplainData == "A")
//            {
//                if(order.EquipNum2.IsNotNullOrEmpty())
//                {
//                    if (equip2.ExplainData != "A") continue;
//                }
//                order.Status = 3;
//                order.OrderTime = DateTime.Now;
//            }
//            else if (equip.ExplainData == "S")
//            {
//                if (order.EquipNum2.IsNotNullOrEmpty())
//                {
//                    if (equip2.ExplainData != "S") continue;
//                }
//                order.Status = 4;
//                order.OrderTime = DateTime.Now;
//            }
           

//        }
//    }
//    /// <summary>
//    /// 预约堆垛机
//    /// </summary>
//    /// <returns></returns>
//    private async Task OrderStacker()
//    {
//        var orders = _processJobService.FmtJobs.Values;

      
//        // 验证库位状态后唤醒堆垛机
//        foreach (var order in orders)
//        {
//            if (order.Status !=1)
//            {
//                continue;
//            }

//            // 根据job1和job2查询入库任务

//           var msg= _processJobService.AddJob(new F29EnterJob
//           {
//               FmtKey=order.GetKey()
//           }, ProcessProviderType.EnterJob);

//            if (msg.IsNotNullOrEmpty())
//            {
//                order.Message = msg;
//                continue;
//            }
//            order.Status = 2;


//        }
//    }

//    public async Task<bool> ProcessWarn()
//    {
//        return true;
//    }

//    public bool Stop()
//    {
//        return true;
//    }
//}
